class $Chat {
	//构造函数
	constructor() {
		this.jim = new JMessage({
			debug: false
		})

	}
	//初始化传值  对象
	init() {
		let that = this
		let Jim = this.jim
		return new Promise((resolve, reject) => {
			// 轮询保证在初始化之前im已连接
			let num = 0
			let interval = setInterval(() => {
				console.log(Jim.isConnect());
				num++
				if (Jim.isConnect()) {
					clearInterval(interval)
					console.log('连接总共消耗了' + num * 500 / 1000 + '秒');
					if (!Jim.isInit()) {
						const config = this.getConfig()
						Jim.init({
							...config,
							flag: 1
						}).onSuccess(function (data) {
							console.log('<<<----------Jim初始化成功---------->>>');
							resolve(data)
						}).onFail(function (data) {
							console.log('<<<----------Jim初始化失败---------->>>');
							reject(data)
						}).onTimeout(function (data) {
							console.log('<<<----------Jim初始化超时---------->>>');
							reject(data)
						})
					}
				}
			}, 500)
		})
	}
	//生成随机字符串  对象
	getRandom_str() {
		const words = 'qwertyuiopasdfghjkllzxcvbnm123456789'
		let str = ''
		for (let i = 0; i < 36; i++) {
			str += words.charAt(Math.random() * words.length - 1)
		}
		return str
	}
	//生成签名
	getConfig() {
		const appkey = 'f8fda95da1d7f5894955ec63'
		const random_str = this.getRandom_str()
		const timestamp = Date.parse(new Date())
		const key = 'cd9b733d9179de75279edf16'
		const signature = md5(
			`appkey=${appkey}&timestamp=${timestamp}&random_str=${random_str}&key=${key}`)
		return {
			appkey,
			random_str,
			timestamp,
			signature
		}
	}
	// 判断是否登录
	isLogin() {
		return this.jim.isLogin();
	}
	// 登录
	login(
		username,
		password
	) {
		let that = this
		let Jim = this.jim
		return new Promise((resolve, reject) => {
			if (!Jim.isLogin()) {
				Jim.login({
					username,
					password,
				}).onSuccess(function (data) {
					console.log('<<<----------Jim登录成功---------->>>');
					that.username = username;
					resolve(data)
					// that.onDisconnect(() => {
					// 	that.login({
					// 		username,
					// 		password
					// 	})
					// })
				}).onFail(function (data) {
					console.log('<<<----------Jim登录失败---------->>>');
					reject(data)
				})
			} else {
				console.log('<<<----------Jim已经登录了---------->>>');
				resolve('')
			}
		})
	}
	// 退出
	loginout() {
		this.jim.loginOut()
	}
	// 获取用户信息
	getUserInfo(
		username
	) {
		let that = this
		let Jim = this.jim
		return new Promise((resolve, reject) => {
			Jim.getUserInfo({
				'username': username,
				'appkey': that.getConfig().appkey
			}).onSuccess(function (data) {
				//data.code 返回码
				//data.message 描述
				//data.user_info.username
				//data.user_info.appkey
				//data.user_info.nickname
				//data.user_info.avatar 头像
				//data.user_info.birthday 生日，默认空
				//data.user_info.gender 性别 0 - 未知， 1 - 男 ，2 - 女
				//data.user_info.signature 用户签名
				//data.user_info.region 用户所属地区
				//data.user_info.address 用户地址
				//data.user_info.mtime 用户信息最后修改时间
				//data.extras 自定义json字段
				if (data.code == 0) {
					resolve(data.user_info)
				}
			}).onFail(function (data) {
				//data.code 返回码
				//data.message 描述
				reject(data)
			});
		})
	}
	// 发送单聊消息
	sendSingleMsg(
		target_username,
		content,
		msg_type
	) {
		let that = this
		let Jim = this.jim
		return new Promise((resolve, reject) => {
			Jim.sendSingleMsg({
				'target_username': target_username,
				'content': content,
				'extras': {
					msg_type: msg_type
				}
			}).onSuccess(function (data) {
				//data.code 返回码
				//data.message 描述
				//data.msg_id 发送成功后的消息 id
				//data.ctime_ms 消息生成时间,毫秒
				//data.appkey 用户所属 appkey
				//data.target_username 用户名
				//msg.content 发送成功消息体,见下面消息体详情
				console.log('发送单聊消息成功');
				resolve(data)
			}).onFail(function (data) {
				//data.code 返回码
				//data.message 描述
				console.log('发送单聊消息失败', data);

			});
		})
	}
	// 获取会话列表
	getConversation() {
		let that = this
		let Jim = this.jim
		return new Promise((resolve, reject) => {
			Jim.getConversation().onSuccess(function (data) {
				//data.code 返回码
				//data.message 描述
				//data.conversations[] 会话列表，属性如下示例
				//data.conversations[0].extras 附加字段
				//data.conversations[0].unread_msg_count 消息未读数
				//data.conversations[0].name  会话名称
				//data.conversations[0].appkey  appkey(单聊)
				//data.conversations[0].username  用户名(单聊)
				//data.conversations[0].nickname  用户昵称(单聊)
				//data.conversations[0].avatar  头像 media_id 
				//data.conversations[0].mtime 会话最后的消息时间戳
				//data.conversations[0].gid 群 id(群聊)
				//data.conversations[0].type  会话类型(3 代表单聊会话类型，4 代表群聊会话类型)
				if (data.code == 0) {
					var list = [];
					console.log('获取会话列表成功');
					for (var i = 0; i < data.conversations.length; i++) {
						var friend = { //好友昵称
							username: data.conversations[i].name,
							id: data.conversations[i].name //好友ID
							,
							avatar: data.conversations[i].avatar ? data.conversations[i].avatar : 'http://33wang.douyinhot.com/4bad2202003051614055110.jpg' //好友头像
							,
							sign: "" //好友签名
							,
							status: "online" //若值为offline代表离线，online或者不填为在线
						};
						list.push(friend);
					}
					resolve(list)
				} else {
					console.log('获取会话列表失败');
					console.log(data);
				}
			}).onFail(function (data) {
				//data.code 返回码
				//data.message 描述
				console.log(data);

				reject(data)
			});
		})
	}
	// 监听接收消息事件
	onMsgReceive(func) {
		let JIM = this.jim
		JIM.onMsgReceive(function (data) {
			// data.messages[]
			// data.messages[].ctime_ms
			// data.messages[].msg_type 会话类型
			// data.messages[].msg_id
			// data.messages[].from_appey 单聊有效
			// data.messages[].from_username 单聊有效
			// data.messages[].from_gid 群聊有效
			// data.messages[].need_receipt
			// data.messages[].content
			// data.messages[].custom_notification.enabled
			// data.messages[].custom_notification.title
			// data.messages[].custom_notification.alert
			// data.messages[].custom_notification.at_prefix
			console.log('接收消息事件');
			func(data)
		});
	}
	//离线消息同步监听
	onSyncConversation(func) {
		let JIM = this.jim
		console.log('获取历史消息记录');
		JIM.onSyncConversation(function (datamsg) {
			// data[]
			// data[].msg_type 会话类型
			// data[].from_appey 单聊有效
			// data[].from_username 单聊有效
			// data[].from_gid 群聊有效
			// data[].unread_msg_count 消息未读数
			// 消息已读回执状态，针对自己发的消息
			// data[].receipt_msgs[]
			// data[].receipt_msgs[].msg_id
			// data[].receipt_msgs[].unread_count
			// data[].receipt_msgs[].mtime
			// 消息列表
			// data[].msgs[]
			// data[].msgs[].msg_id
			// data[].msgs[].content
			// data[].msgs[].msg_type
			// data[].msgs[].ctime_ms
			// data[].msgs[].need_receipt
			// data[].msgs[].custom_notification.enabled
			// data[].msgs[].custom_notification.title
			// data[].msgs[].custom_notification.alert
			// data[].msgs[].custom_notification.at_prefix
			console.log('获取历史消息记录');
			func(datamsg)
		});
	}
	sendSinglePic(target_username, image) {
		return new Promise((resolve, reject) => {
			var fd = new FormData();
			fd.append();
			JIM.sendSinglePic({
				'target_username': across_user,
				'image': fd,
				extras: {
					url: content
				}
			}).onSuccess(function (res, msg) {
				console.log('发送图片成功');
				resolve(data)
			}).onFail(function (res) {
				console.log('error:' + JSON.stringify(res));
			});
			// JIM.sendSinglePic({
			// 	'target_username': target_username,
			// 	'image': image
			// }).onSuccess(function (data) {
			// 	//data.code 返回码
			// 	//data.message 描述
			// 	//data.msg_id 发送成功后的消息id
			// 	//data.ctime_ms 消息生成时间,毫秒
			// 	//data.appkey 用户所属 appkey
			// 	//data.target_username 用户名
			// 	//msg.content 发送成功消息体
			// 	console.log('发送图片成功');
			// 	resolve(data)
			// }).onFail(function (data) {
			// 	//同发送单聊文本
			// });
		})
	}


}

let $chat = new $Chat();